/**
 * @description 数据处理类，可以根据项目自行配置
 * @author LI
 * @date 2020-11-18 10:12
 */
import { AxiosRequestConfig, AxiosResponse } from 'axios'
import { Result } from '@/utils/axios/types'

export abstract class AxiosTransform {
  /**
   * @description: 请求之前处理配置
   */
  beforeRequestHook?: (config: AxiosRequestConfig) => AxiosRequestConfig

  /**
   * @description: 请求成功处理
   */
  transformRequestData?: (res: AxiosResponse<Result>) => any

  /**
   * @description: 请求失败处理
   */
  requestCatch?: (e: Error) => Promise<any>

  /**
   * @description: 请求之前的拦截器
   */
  requestInterceptors?: (config: AxiosRequestConfig) => AxiosRequestConfig

  /**
   * @description: 请求之后的拦截器
   */
  responseInterceptors?: (res: AxiosResponse<any>) => AxiosResponse<any>

  /**
   * @description: 请求之前的拦截器错误处理
   */
  requestInterceptorsCatch?: (error: Error) => void

  /**
   * @description: 请求之后的拦截器错误处理
   */
  responseInterceptorsCatch?: (error: Error) => void
}
